#!/usr/bin/python3
# coding=utf-8
#
# Copyright (C) 2023-2025. Huawei Technologies Co., Ltd. All rights reserved.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# ===============================================================================

import numpy as np
dtype_emu = {
    np.float16: 1,
    np.float32: 2,
    np.int8: 3,
    np.int16: 4,
    np.int32: 5,
    np.complex64: 16,
    np.complex128: 17
}

def gen_golden_data_simple():
    # dtype = np.float16
    dtype = np.complex64

    ## 核间均分，单核计算量对齐:
    # input_shape = [32, 1024]

    ## 核间均分，单核计算量非对齐:
    # input_shape = [8, 1023]

    ## 核间不均分，单核计算量对齐:
    # input_shape = [32, 1023]

    ## 核间不均分，单核计算量非对齐:
    input_shape = [17, 1023]
    input_x = np.random.uniform(1, 100, input_shape).astype(dtype)

    # 生成golden数据（实数类型输出1，复数类型输出0）
    if dtype in (np.complex64, np.complex128):
        golden = np.zeros_like(input_x, dtype=np.uint8)
    else:
        golden = np.ones_like(input_x, dtype=np.uint8)
    tiling = np.array([
        input_shape[0] * input_shape[1],       # 0: totalLength
        dtype_emu[dtype],          # 1: dataType
        0, 0, 0,            # 2-4: blockLength, tileNum, tileLength（核均分场景）
        0,                  # 5: lastTileLength
        0, 0, 0, 0, 0,      # 6-10: formerNum, formerLength, formerTileNum, formerTileLength, formerLastTileLength（核不均分场景）
        0, 0, 0, 0,         # 11-14: tailNum, tailLength, tailTileNum, tailTileLength
        0,                  # 15: tailLastTileLength
        0                   # 16: isEvenCore
    ], dtype=np.uint32)


    tiling.tofile("./input/input_tiling.bin")
    input_x.tofile("./input/input_x.bin")
    golden.tofile("./output/golden.bin")

if __name__ == "__main__":
    gen_golden_data_simple()
